<?php
/**
 * Этот класс выполняет аутентификацию и, при необходимости, регистрацию посетителя.
 */
class LoginzaUserIdentity extends CUserIdentity
{
    private $_id;
 
    public function __construct()
    {
    }
 
    /**
     * Аутентификация пользователя.
     * Этот метод ищет пользователя в БД. Если он не найден, создает нового.
     * Устанавливает значения атрибутов.
     *
     * @param LoginzaModel $loginzaModel модель, содержащая данные от сервиса Loginza
     * @return boolean true если пользователь найден или создан новый аккаунт, false - если недостаточно данных
     */
    public function authenticate($loginzaModel = null) 
    {
 
        if (empty($loginzaModel->identity) || empty($loginzaModel->provider))
        {
            return false;
        }
        //сначала проверяем, существует ли такой пользователь в БД
        $sn = SocialNetwork::model()->find('id_social=:identity AND provider=:provider', array(':identity'=>$loginzaModel->identity ,':provider'=>$loginzaModel->provider));

        if($sn)
        {
            $client = Client::model()->find('id=:id', array(':id' => $sn->id_client));
            $user = User::model()->find('id=:id AND state =:state', array(':id' => $client->id_user, ':state' => 1));

            if(!$user) { return false; }

            $this->setState('email', $user->email);
            $this->setState('type', $user->type);
            $this->setState('first_name', $client->first_name);
            $this->setState('last_name', $client->last_name);
            $this->setState('url', Yii::app()->urlManager->baseUrl.'/client/');  
            $this->_id = $client->id_user;              
        }
        else
        {
            $user = new User();
            if(empty($loginzaModel->email))
            $user->email = empty($loginzaModel->email) ? '' : $loginzaModel->email;
            $user->type = 3;
            if($user->save(false))
            {
                $id = Yii::app()->db->getLastInsertID();
                $client = new Client();
                $client->id_user = $id;
                $client->first_name = empty($loginzaModel->first_name) ? '' : $loginzaModel->first_name;
                $client->last_name = empty($loginzaModel->last_name) ? '' : $loginzaModel->last_name;
                $client->save();


                $sn = new SocialNetwork();
                $sn->id_client = Yii::app()->db->getLastInsertID();
                $sn->id_social = $loginzaModel->identity;
                $sn->provider = $loginzaModel->provider;
                $sn->save();


                $this->setState('email', $user->email);
                $this->setState('type', $user->type);
                $this->setState('first_name', $client->first_name);
                $this->setState('last_name', $client->last_name);
                $this->setState('url', Yii::app()->urlManager->baseUrl.'/client/');

                $this->_id = $sn->id;
            }
        }
        return true;
    }
 
    public function getId()
    {
        return $this->_id;
    }
}